import { useLoginUserStore } from '@/stores/useLoginUserStore'
import { message } from 'ant-design-vue'
import router from '@/router'

/**
 * 全局权限校验
 */
router.beforeEach(async (to, from, next) => {
  const loginUserStore = useLoginUserStore()
  
  try {
    // 每次路由变化时都尝试获取最新的用户信息
    await loginUserStore.fetchLoginUser()
    const loginUser = loginUserStore.loginUser

    const toUrl = to.fullPath

    // 如果是登录页面，直接放行
    if (toUrl.includes('/user/login')) {
      next()
      return
    }

    // 检查是否需要管理员权限
    if (toUrl.startsWith('/admin')) {
      if (!loginUser || loginUser.userRole !== 'admin') {
        message.error('没有权限')
        next(`/user/login?redirect=${to.fullPath}`)
        return
      }
    }

    // 检查是否已登录
    if (!loginUser && !toUrl.includes('/user/login')) {
      message.error('请先登录')
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }

    next()
  } catch (error) {
    console.error('获取用户信息失败:', error)
    // 如果获取用户信息失败，且不是登录页面，则跳转到登录页
    if (!to.path.includes('/user/login')) {
      message.error('获取用户信息失败，请重新登录')
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }
    next()
  }
})
